package javaCode.chapter12.arrays_;

import java.util.Arrays;
import java.util.List;

/**
 * @author 徐州城
 * @version 1.0
 */
public class ArraysMethod02 {
    public static void main(String[] args) {
        Integer[] arr = {1,2,3,4,5};
        //binarySearch 通过二分搜索进行查找，要求必须排好序
        //解读
        //1. 使用 binarySearch 二叉查找
        //2. 要求该数组是有序的，如果该数组是无序的，不能使用 binarySearch
        //3. 如果数组中不存在该元素，就返回 return -(low + 1);  // key not found.
        int index = Arrays.binarySearch(arr, 9);
        System.out.println("index=" + index);

        //copyOf 数组元素的复制
        //解读
        //1. 从 arr数组中，拷贝 arr.length 个元素到 newArr数组中
        //2. 如果拷贝的长度 > arr.length 就在新数组的后面，增加 null
        //3. 如果拷贝长度 < 0  就会抛出异常NegativeArraySizeException
        //4. 该方法底层使用的是 System.arraycopy()
        Integer[] newArr = Arrays.copyOf(arr, arr.length + 1);
        System.out.println("newArr拷贝完后 " + Arrays.toString(newArr));

        //fill 数组填充
        //1. 使用99 去填充 num数组，可以理解成是替换 原来所有的元素
        Integer[] num = new Integer[]{1,3,5};
        Arrays.fill(num,33);
        System.out.println("num数组填完后 " + Arrays.toString(num));

        //equals 比较两个数组元素内容是否完全一致
        //1. 如果arr 和 arr2 数组的元素一样，则方法返回true
        Integer[] arr2 = {1,2,3,4,5};
        boolean equals = Arrays.equals(arr, arr2);
        System.out.println("equals=" + equals);

        //asList 将一组值，转换成List
        //解读
        //1. abList方法，会将 (2,3,5,8)数据转换成一个List 集合
        //2. 返回的是 asList    编译类型是 List(接口)
        //3. abList 运行类型 java.util.Arrays$ArrayList，是Arrays 类的 静态内部类
        //   private static class ArrayList<E> extends AbstractList<E>
        //        implements RandomAccess, java.io.Serializable
        List<Integer> asList = Arrays.asList(2,3,5,8);
        System.out.println("asList=" + asList);
        System.out.println("asList的运行类型 " + asList.getClass());
    }
}
